VHDL
کتاب مرجع برای تدریس Digital system design with VHDL کتاب VHDL است که شنیده ام در ایران آفست شده است به هرحال می تونید تهیه کنید.
VHDLزبان توصیف سخت افزاری برای طراحی مدارات دیجیتال می باشد. و مانند سایر زبانهای برنامه نویسی دارای دستورات خاص خود می باشد.
VHDL : Very High Speed Integrated Circuit Hardware Description Languege
برای یادگیری زبان VHDL دانستن جبر بول و آشنایی با مدارات منطقی ضروری است. لذا ما فرض می کنیم که دوستان با دو مقوله فوق آشنایی کافی دارند.
و اما یادگیری VHDL چه مزایایی دارد. قبل از هرچیز باید گفت که هدف از یادگیری VHDL خصوصاْ در ایران طراحی مدارات دیجیتال و پیاده سازی در FPGA می باشد هرچند مدار طراحی شده را بصورت ASIC (آی سی خاص) نیز می توان پیاده سازی نمود اما غالباْ مدارات دیجیتال با هدف پیاده سازی در FPGA طراحی می شوند.
برای یادگیری VHDL در این مقطع نیاز به نرم افزاری برای شبیه سازی مدارات طراحی شده خواهیم داشت. نرم افزارهای زیادی برای این منظور وجود دارند اما بهترین و آسانترین انها Active-HDL می باشد که نتایج شبیه سازی را بصورت شکل موجهای گرافیکی نمایش می دهد. و در عین حال کار کردی آسان دارد. در اولین فرصت نحوه تهیه این نرم افزار را خواهم گفت.
و اما بپردازیم به VHDL :
هر برنامه VHDL دارای دو قسمت اصلی می باشد. یکی به نام Entity و دیگری Architecture :
در قسمت Entity ورودیها و خروجیهای مدار یا برنامه VHDL و مشخصات آنها تعیین می شود. به عبارت دیگر Entity مثل یک جعبه سیاه است که از بیرون فقط ورودیها و خروجیها قابل تشخیص است همچنین تعدادی از پارامترهای کلی اما اینکه در این جعبه سیاه چه خبر است در Architecture معلوم می شود.
در Architecture در واقع نحوه ارتباط ورودیها و خروجیها معلوم می شود. مثلاْ اگر در قسمت Entity دو ورودی A و B و یک خروجی C تعریف کرده ایم در Architecture می گوییم که این ورودیها چه رابطه ای با خروجی دارند. مثلاْ ممکن است بگوییم C <= A AND B یا C <= A XOR B و ... . بنابراین دیده می شود که یک برنامه VHDL می تواند تنها یک Entity داشته باشد ولی در تعداد Architecture ها محدودیتی ندارد.
ٍEntity Example1 is
Port (A,B,C: IN Bit ; O1 , O2: OUT Bit)
End Entity Example1;
Architecture AND2 of Example1 is
Begin
O1 <= A AND B ;
O2 <= B AND C;
End Architecture AND2;
Architecture OR3 of Example1 is
begin
O1 <= A OR B OR C ;
O2 <= A OR C:
End Architecture OR3;
می بینید که من با یک Entity دو Architecture تعریف کرده ام اما باید توجه داشته باشید که این دو Architecture در واقع بیان کننده دو مدار جداگانه هستند که تنها دارای مرودی و خروجی یکسان هستند. بنابراین در آن واحد فقط از یکی از آنها می توان استفاده نمود. همانگونه که در عمل امکان ندارد یک خروجی در آن واحد هم حاصل OR و هم AND دو یا چند سیگنال ورودی باشد در VHDL نیز امکان ندارد چراکه VHDL نیز همان مدار منطقی می باشد منتها فقط نحوه توصیف تغییر کرده است.
VHDL دارای ساختاری Event Driven است یعنی برخلاف سایر زبانهای برنامه نویسی با هر تغییر روی مقادیر ورودی خروجیهای متناظر محاسبه می شوند . اینطور نیست که دستورات به ترتیب و خط به خط اجرا شوند. مثلاْ در مثال فوق در بخش AND2 اگر سیگنال ورودی C تغییر کند بلافاصله مقدار خروجی برای O2 محاسبه می شود بدون آنکه محاسبات مربوط به O1 انجام شود. اما اگر همین مثال را با استفاده از مثلاْ زبان C اجرا می کردیم ابتدا خط بالایی یعنی O1 <= A AND B اجرا می شد سپس دستور O2 <= B AND C اجرا می شد.
فصل اول: " طراحی مدارهای ترکیبی با استفاده از مدلهای گیت VHDL "
1.1 Entity و Architecture
2.1 شناسه ها
3.1 Netlist
4.1 انتقال سیگنال
5.1 پارامترهای عمومی
6.1 مقادیر ثابت و پورتهای باز
7.1 Testbench
8.1 پیکربندی یا Configuration
----------------------------------------------------------------------------
مدارهای ترکیبی همانطور که می دانیم دارای حالت نیستند و تغییرات روی سیگنالهای ورودی بلافاصله به خروجیهای مدار منتقل می شوند. در این فصل اصول طراحی مدارهای ترکیبی با استفاده از VHDL آموزش داده خواهد شد.
۱.۱ Entity و Architecture
همانطور که در جلسه قبل گفته شد ، هر برنامه VHDL ساده دارای دو قسمت می باشد: یک Entity و یک Architecture . قسمت Entity یک جعبه سیاهی را معرفی می کند که تنها می توان ورودیها و خروجیها و نوع آنها را دید اما از مدار داخل آن اطلاعاتی به ما نمی دهد. اما Architecture تابع و یا ساختار و معماری مدار داخل جعبه سیاه را معرفی می کند. به عنوان یک مثال ساده فرض کنید یک جعبه سیاه در اختیار داریم که دو سیم به آن وارد شده و یک سیم نیز از آن خارج شده است. اگر قرار باشد آنرا بصورت برنامه VHDL مدل کنیم باید در قسمت Entity اسم ورودیها و خروجیها مشخص شود و همچنین مشخص کنیم که نوع آنها چیست ؟ ( Bit ، Std_logic و ... ) - که بعداً مفصلاً در مورد آن بحث خواهد شد - و در قسمت Architecture گفته می شود که این سیگنالها چه رابطه ای با هم دارند مثلاً آیا با هم جمع می شوند ، AND می شوند یا هر چیز دیگری. بنابراین می توان گفت که یک برنامه VHDL میتواند دارای چندین Architecture باشد اما بیش از یک Entity مجاز نیست داشته باشد. یعنی یک مدار با ورودیها و خروجیهای مشخص در زمانهای مختلف می تواند عملکردهای متفاوتی داشته باشد. یا حتی می توان برای یک Entity توصیف های متفاوتی از یک عملکرد را ایجاد نمود ، مثلاً برای نشان دادن AND دو سیگنال یکبار ممکن است از گیت AND که قبلاً وجود دارد استفاده کنیم و یا ممکن است آنرا بصورت تابع بولی نمایش دهیم و یا آنرا بصورت جدول درستی نمایش دهیم. که برای هریک از موارد فوق می توان Architecture جداگانه ای برای یک Entity نوشت.
توصیف Entity با کلمات رزرو شده ENTITY و IS شروع و با کلمات رزرو شده END ENTITY خاتمه می یابد. البته آوردن کلمه ENTITY همراه END اختیاری است اما برای وضوح بیشتر برنامه بهتر است نوشته شود. در VHDL برای مشخص کردن انتهای هر عبارت همانند زبان C از " ; " استفاده می شود. بنابراین توصیف یک Entity بصورت زیر خواهد بود.
ENTITY exp1 IS
PORT ( x , y : IN BIT ; z: OUT BIT);
END ENTITY exp1 ;
VHDL اولیه در سال 1987 تعریف شد. در سال 1993 چند استاندارد دیگر نیز به VHDL اضافه شد که باعث سازگاری بیشتر آن با دستور زبان برنامه نویسی شود. در اینجا برای خوانایی بیشتر مثالها از استاندارد 1993 استفاده شده است. در استاندارد 1987 ، ترجیحاً از END بجای END ENTITY استفاده می شد. این مسأله در مورد ساختارهای دیگر زبان نیز صادق بود.
Entity شامل یک توصیف ( Declaration ) می باشد . از کلمه رزرو شده PORT برای مشخص کردن ارتباطات بین Entity و دنیای خارج استفاده می شود. در مثال قبل سیگنالهای x و y از نوع بیت با استفاده از کلمه رزرو شده IN معرفی شدند و سیگنال z نیز از نوع BIT با استفاده از کلمه رزرو شده OUT بعنوان خروجی مدار معرفی شدند. سیگنالهای دوطرفه ( مرودی و خروجی ) با استفاده از کلمه رزرو شده INOUT در VHDL مشخص می شوند. BIT نوع پیشفرض با دو مقدار 0 و 1 می باشد.
تعریف Architecture شامل اسم ان و اسم Entity مربوطه می باشد. اسم Entity در اینجا باید همان نامی باشد که در قسمت تعریف Entity انتخاب کرده ایم و انتخاب ان نیز کاملاً اختیاری است منتهی مجاز نیستیم که از کلمات رزرو شده استفاده کنیم. در مثال قبل مدل VHDL تنها شامل یک عبارت بین کلمه رزرو شده Begin و خط END Architecture می باشد که در واقع مقدار x AND y را به سیگنال z منتقل میکند. تابع AND یک عملگر داخلی VHDL می باشد که مقدار نوع بیت گرفته و خروجی نوع بیت تولید کرده است. VHDL دارای عملگرهای NOT ، AND ، OR ، NAND ، NOR ، XOR و XNOR می باشد که برای مقادیر نوع بیت تعریف شده اند و چنانچه برای سایر انواع متغیرها مورد استفاده قرار گیرد باید کتابخانه های مربوطه که این عملگرها را برای آن نوع متغیر تعریف نموده اند فراخوانی شوند. عملگر NOT دارای بالاترین اولویت بوده و سایر عملگرها دارای اولویت یکسان هستند. لذا اولویت اجرای آنها بترتیب نوشتن ( از چپ به راست ) می باشد. توجه داشته باشید که جبر بول در حالت عادی برای عملگر AND اولویت بالاتری نسبت به OR قائل است اما این مسأله در VHDL صحت ندارد.
منبع : سایت اردلان الکترونیک